/*
 * Copyright 2020-2030 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.gitee.minimalismstyle.fresh.common.core.domain

/**
 *  树结构节点接口，实现该接口的类可以调用 {@link com.gitee.minimalismstyle.fresh.common.core.util.TreeUtils}
 *  数据树化
 *
 * @author maoxiaodong
 */
interface Node<T: Node<T, ID>, ID> : Comparable<T> {

    /**
     * 节点ID
     */
    val id: ID?

    /**
     * 父节点ID
     */
    val parentId: ID?

    /**
     * 节点排序
     */
    val sort: Int

    /**
     * 子节点列表
     */
    var children: MutableList<T>?

    /**
     * 排序
     * @param other
     * @return
     */
    override fun compareTo(other: T): Int {
        return sort - other.sort
    }
}